#pragma once
#include <QObject>
#include <QMutex>
#include <QTimer>
#include <QSharedPointer>
#include <QMutexLocker>

// 前向声明
class VViewport;
class VGameEngine;

class IVGEngineLoop
{
public:
    virtual bool Init() = 0;
    virtual void Tick() = 0;
};

/**
 * VGEngineLoop - 游戏引擎主循环单例类
 * 负责引擎的初始化、更新循环和资源管理
 * 采用两阶段初始化：PreInit(参数收集) + Init(实际初始化)
 */
class VGEngineLoop : public QObject, public IVGEngineLoop
{
    Q_OBJECT

public:
    // 两阶段初始化
    static qint32 PreInit();  // 预初始化 - 参数收集和基础系统准备
    bool Init() override;    // 核心初始化 - RHI和Viewport验证

    // 主循环
    void Tick() override;

    // 退出处理
    static void PreExit();
    static void AppPreExit();
    static void AppExit();
    static void Exit();
};
